"use strict";

var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");

exports.__esModule = true;
exports.default = void 0;

var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));

var _utils = require("../utils");

var _touch = require("../mixins/touch");

var _createNamespace = (0, _utils.createNamespace)('tabs'),
    createComponent = _createNamespace[0],
    bem = _createNamespace[1];

var MIN_SWIPE_DISTANCE = 50;

var _default = createComponent({
    mixins: [_touch.TouchMixin],
    props: {
        count: Number,
        duration: Number,
        animated: Boolean,
        swipeable: Boolean,
        currentIndex: Number
    },
    computed: {
        style: function style() {
            if (this.animated) {
                return {
                    transform: "translate3d(" + -1 * this.currentIndex * 100 + "%, 0, 0)",
                    transitionDuration: this.duration + "s"
                };
            }
        },
        listeners: function listeners() {
            if (this.swipeable) {
                return {
                    touchstart: this.touchStart,
                    touchmove: this.touchMove,
                    touchend: this.onTouchEnd,
                    touchcancel: this.onTouchEnd
                };
            }
        }
    },
    methods: {
        // watch swipe touch end
        onTouchEnd: function onTouchEnd() {
            var direction = this.direction,
                deltaX = this.deltaX,
                currentIndex = this.currentIndex;
            /* istanbul ignore else */

            if (direction === 'horizontal' && this.offsetX >= MIN_SWIPE_DISTANCE) {
                /* istanbul ignore else */
                if (deltaX > 0 && currentIndex !== 0) {
                    this.$emit('change', currentIndex - 1);
                } else if (deltaX < 0 && currentIndex !== this.count - 1) {
                    this.$emit('change', currentIndex + 1);
                }
            }
        },
        genChildren: function genChildren() {
            var h = this.$createElement;

            if (this.animated) {
                return h("div", {
                    "class": bem('track'),
                    "style": this.style
                }, [this.slots()]);
            }

            return this.slots();
        }
    },
    render: function render() {
        var h = arguments[0];
        return h("div", {
            "class": bem('content', {
                animated: this.animated
            }),
            "on": (0, _extends2.default)({}, this.listeners)
        }, [this.genChildren()]);
    }
});

exports.default = _default;